package com.xique.common.core.enums;

import com.alibaba.fastjson.annotation.JSONType;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.*;

/**
 * 命令同步类型
 *
 * @author WLD
 */
@Getter
@AllArgsConstructor
@JSONType(serializeEnumAsJavaBean = true)
public enum CommandSyncCmd {

    /**
     * 车场参数
     */
    DOWN_SINGLE_DEV_PARK_CONFIG(138, "车场参数"),

    /**
     * 车库参数
     */
    DOWN_SINGLE_DEV_PARK_GARAGE_LIST(158, "车库参数"),

    /**
     * 通道参数
     */
    DOWN_PARK_LANE(136, "通道参数"),

    /**
     * 副相机
     */
    DOWN_SUB_IPC(140, "副相机"),

    /**
     * 附加设备
     */
    ADDITIVE_EQUIPMENT(130,"附加设备"),

    /**
     * LED屏显
     */
    SET_LED(134, "LED屏显"),

    /**
     * 车辆信息
     */
    DOWN_CARS(90, "车辆信息"),

    /**
     * 管理类型
     */
    DOWN_MNG_TYPE(95, "管理类型"),

    /**
     * 通行权限
     */
    DOWN_MNG_TYPE_PASS_AUTH(100, "通行权限"),

    /**
     * 收费规则
     */
    DOWN_CHARGE_RULE_COMM_LIST(149, "收费规则");

    /**
     * 命令
     */
    private final Integer cmd;

    /**
     * 命令名称
     */
    private final String name;

    /**
     * 根据 cmd 匹配 CommandSyncCmd
     */
    public static CommandSyncCmd matchCmd(Integer cmd) {
        for (CommandSyncCmd commandSyncCmd : CommandSyncCmd.values()) {
            if (commandSyncCmd.cmd.equals(cmd)) {
                return commandSyncCmd;
            }
        }
        return null;
    }

    /**
     * 根据 cmd 匹配名称
     */
    public static String matchName(Integer cmd) {
        for (CommandSyncCmd commandSyncCmd : CommandSyncCmd.values()) {
            if (commandSyncCmd.cmd.equals(cmd)) {
                return commandSyncCmd.name;
            }
        }
        return "未知";
    }

    public static List<Map<String, Object>> getList() {
        List<Map<String, Object>> resultList = new ArrayList<>();
        CommandSyncCmd[] values = CommandSyncCmd.values();
        Arrays.stream(values).forEach(commandSyncCmd -> {
            Map<String, Object> commandSyncCmdMap = new HashMap<>(2);
            commandSyncCmdMap.put("cmd", commandSyncCmd.getCmd());
            commandSyncCmdMap.put("name", commandSyncCmd.getName());
            resultList.add(commandSyncCmdMap);
        });
        return resultList;
    }

}
